package br.com.vilababy.sigvb;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpSession;

import org.primefaces.context.RequestContext;

import br.com.vilababy.sigvb.constantes.SIGVBEnum;

public class SIGVBUtil {
	
	/**
	 * @author Diego Patrick da Silva Santos
	 */
	public static String getPath() {
		return FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
	}
	
	public static void redirecionar(String url) {
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect(getPath().concat(url));
		} catch (IOException ex){
			adicionarMensagemErro(getValorMensagem(SIGVBEnum.ERRO_NAVEGACAO.getValor()), SIGVBEnum.PAGINA_NAO_ENCONTRADA.getValor());
		}
	}
	
	public static void atualizarComponente(String id) {
		RequestContext.getCurrentInstance().update(id);
	}
	
	public static Map<String, String> getObjetosSessao() {
		FacesContext fc = FacesContext.getCurrentInstance();
		return fc.getExternalContext().getRequestParameterMap();
	}
	
	public static void setObjetoSessao(String chave, Object valor) {
		HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		session.setAttribute(chave, valor);
	}
	
	public static Object getObjetoSessao(String chave) {
		HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		return session.getAttribute(chave);
	}
	
	public static void removerObjetoSessao(String chave) {
		HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		session.removeAttribute(chave);
	}
	
	public static void adicionarMensagemErro(String titulo, String texto) { 
		FacesMessage mensagem = new FacesMessage(titulo, texto);
		mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
		FacesContext.getCurrentInstance().addMessage(null, mensagem);
	}
	
	public static void adicionarMensagemErro(String idCliente, FacesMessage mensagem) {
		FacesContext.getCurrentInstance().addMessage(idCliente, mensagem);
	}
	
	public static void adicionarMensagemSucesso(String titulo, String texto) { 
		FacesMessage mensagem = new FacesMessage(titulo, texto);
		mensagem.setSeverity(FacesMessage.SEVERITY_INFO);
		FacesContext.getCurrentInstance().addMessage(null, mensagem);
	}
	
	public static FacesMessage retornarMensagemErro(String titulo, String texto) {
		FacesMessage mensagem = new FacesMessage(titulo, texto);
		mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
		return mensagem;
	}
	
	public static List<FacesMessage> listarMensagens() {
		return FacesContext.getCurrentInstance().getMessageList();
	}
	
	public static List<FacesMessage> listarMensagens(String idCliente) {
		return FacesContext.getCurrentInstance().getMessageList(idCliente);
	}
	
	public static void adicionarParametroRetorno(String chave, Object valor) {
		RequestContext contexto = RequestContext.getCurrentInstance();
		contexto.addCallbackParam(chave, valor);
	}
	
	public static String getValorMensagem(String chave) {
		ResourceBundle rb = ResourceBundle.getBundle(SIGVBEnum.MENSAGENS.getValor());
		return rb.getString(chave);
	}
	
	public static void tratarErroValidacao(FacesMessage mensagem) {
		if (mensagem != null)
			throw new ValidatorException(mensagem);
	}
	
	public static String getParametro(String chave) {
		return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(chave);
	}
	
	public static String removerMascara(String valor) {
		return valor.replaceAll(SIGVBEnum.PONTO.getValor(), SIGVBEnum.VAZIO.getValor()).replaceAll(SIGVBEnum.HIFEN.getValor(), SIGVBEnum.VAZIO.getValor());
	}
}
